# coding=utf-8
# author=haishan09@gmail.com
from common.configs import BaseConfig, config_register


PROPERTY_CONFIG_LIST = [
    {'name': 'title.text', 'label': u'主标题文本', 'widget': 'TextInput', 'type': 'string', 'default': ''},
    {'name': 'title.show', 'label': u'是否显示标题组件', 'widget': 'Checkbox', 'type': 'string', 'default': False},
    {'name': 'series.type', 'label': u'展示类型', 'widget': 'TextInput', 'type': 'string', 'default': ''},
    {'name': 'series.yAxisIndex', 'label': u'使用的Y轴的index', 'widget': 'Select', 'type': 'string', 'default': '0', 'choices': [('0', '0'), ('1', '1')]},
    {'name': 'grid.containLabel', 'label': u'grid', 'label': u'区域包含坐标轴刻度标签', 'widget': 'Checkbox', 'type': 'string', 'default': True},
    {'name': 'grid.left', 'label': u'grid', 'label': u'组件离容器左侧的距离', 'widget': 'NumberInput', 'type': 'string', 'default': 1},
    {'name': 'grid.right', 'label': u'grid', 'label': u'组件离容器右侧的距离', 'widget': 'NumberInput', 'type': 'string', 'default': 3},
    {'name': 'legend.orient', 'label': u'图例列表的布局朝向', 'widget': 'Select', 'type': 'string', 'default': 'horizontal', 'choices': [('horizontal', u'水平'), ('vertical', u'垂直')]},
    {'name': 'legend.selected', 'label': u'图例选中状态表', 'widget': 'TextInput', 'type': 'string', 'default': '{}'},
    {'name': 'legend.max.length', 'label': u'图例列表最大长度', 'widget': 'NumberInput', 'type': 'string', 'default': 12},
    {'name': 'xAxis.type', 'label': u'X坐标轴类型', 'widget': 'TextInput', 'type': 'string', 'default': 'category'},
    {'name': 'xAxis.axisLabel.formatter', 'label': u'X坐标轴刻度标签内容格式器', 'widget': 'TextInput', 'type': 'string', 'default': 'null'},
    {'name': 'yAxis.0.type', 'label': u'Y.0坐标轴类型', 'widget': 'TextInput', 'type': 'string', 'default': 'value'},
    {'name': 'yAxis.0.name', 'label': u'Y.0坐标轴名称', 'widget': 'TextInput', 'type': 'string', 'default': ''},
    {'name': 'yAxis.0.show', 'label': u'Y.0是否显示', 'widget': 'Checkbox', 'type': 'string', 'default': True},
    {'name': 'yAxis.0.max', 'label': u'Y.0坐标轴刻度最大值', 'widget': 'TextInput', 'type': 'string', 'default': 'auto'},
    {'name': 'yAxis.0.min', 'label': u'Y.0坐标轴刻度最小值', 'widget': 'TextInput', 'type': 'string', 'default': 'auto'},
    {'name': 'yAxis.0.axisLabel.formatter', 'label': u'Y.0坐标轴刻度标签内容格式器', 'widget': 'TextInput', 'type': 'string', 'default': ''},
    {'name': 'yAxis.1.type', 'label': u'Y.1坐标轴类型', 'widget': 'TextInput', 'type': 'string', 'default': 'value'},
    {'name': 'yAxis.1.name', 'label': u'Y.1坐标轴名称', 'widget': 'TextInput', 'type': 'string', 'default': ''},
    {'name': 'yAxis.1.show', 'label': u'Y.1是否显示', 'widget': 'Checkbox', 'type': 'string', 'default': False},
    {'name': 'yAxis.1.max', 'label': u'Y.1坐标轴刻度最大值', 'widget': 'TextInput', 'type': 'string', 'default': 'auto'},
    {'name': 'yAxis.1.min', 'label': u'Y.1坐标轴刻度最小值', 'widget': 'TextInput', 'type': 'string', 'default': 'auto'},
    {'name': 'yAxis.1.axisLabel.formatter', 'label': u'Y.1坐标轴刻度标签内容格式器', 'widget': 'TextInput', 'type': 'string', 'default': ''},
    {'name': 'form.bScrollCollapse', 'label': u'自适应高度', 'widget': 'TextInput', 'type': 'string', 'default': ''},
    {'name': 'form.iDisplayLength', 'label': u'表单默认显示行数', 'widget': 'NumberInput', 'type': 'string', 'default': ''},
    {'name': 'form.sScrollY', 'label': u'表单高度', 'widget': 'TextInput', 'type': 'string', 'default': '600px'},
    {'name': 'toolbox.show', 'label': u'是否显示工具栏组件', 'widget': 'Checkbox', 'type': 'string', 'default': True},
    {'name': 'toolbox.orient', 'label': u'工具栏图标的布局朝向', 'widget': 'Select', 'type': 'string', 'default': 'vertical', 'choices': [('horizontal', u'水平'), ('vertical', u'垂直')]},
    {'name': 'toolbox.feature.dataView', 'label': u'数据视图工具', 'widget': 'TextInput', 'type': 'string', 'default': ''},
    {'name': 'toolbox.feature.magicType', 'label': u'动态类型切换示例', 'widget': 'TextInput', 'type': 'string', 'default': ''},
]


class SpecifyChartProperties(type):

    def __new__(cls, name, parents, attrs):
        properties = attrs.get('properties', [])
        attrs['templ'] = filter(lambda p: p.get('name') in properties, PROPERTY_CONFIG_LIST)
        return type.__new__(cls, name, parents, attrs)


class ChartPropertiesConfig(BaseConfig):

    __metaclass__ = SpecifyChartProperties


@config_register('chart', 'line')
class LinePropertiesConfig(ChartPropertiesConfig):

    properties = ['title.show', 'title.text', 'series.type', 
                  'series.yAxisIndex', 'grid.containLabel', 'grid.left', 
                  'grid.right', 'legend.orient', 'legend.selected', 'legend.max.length', 
                  'xAxis.type', 'xAxis.axisLabel.formatter', 'yAxis.0.type', 
                  'yAxis.0.name', 'yAxis.0.show', 'yAxis.0.max', 
                  'yAxis.0.min', 'yAxis.0.axisLabel.formatter', 'yAxis.1.type', 
                  'yAxis.1.name', 'yAxis.1.show', 'yAxis.1.max', 
                  'yAxis.1.min', 'yAxis.1.axisLabel.formatter', 'toolbox.show', 
                  'toolbox.orient', 'toolbox.feature.dataView', 'toolbox.feature.magicType']


@config_register('chart', 'bar')
class BarPropertiesConfig(ChartPropertiesConfig):

    properties = ['title.show', 'title.text', 'series.type', 
                  'series.yAxisIndex', 'grid.containLabel', 'grid.left', 
                  'grid.right', 'legend.orient', 'legend.selected', 'legend.max.length', 
                  'xAxis.type', 'xAxis.axisLabel.formatter', 'yAxis.0.type', 
                  'yAxis.0.name', 'yAxis.0.show', 'yAxis.0.max', 
                  'yAxis.0.min', 'yAxis.0.axisLabel.formatter', 'yAxis.1.type', 
                  'yAxis.1.name', 'yAxis.1.show', 'yAxis.1.max', 
                  'yAxis.1.min', 'yAxis.1.axisLabel.formatter', 'toolbox.show', 
                  'toolbox.orient', 'toolbox.feature.dataView', 'toolbox.feature.magicType']


@config_register('chart', 'pie')
class PiePropertiesConfig(ChartPropertiesConfig):

    properties = ['title.show', 'title.text', 
                  'grid.left', 'grid.right', 
                  'legend.orient', 'legend.selected', 'legend.max.length',
                  'toolbox.show', 'toolbox.orient', 'toolbox.feature.dataView', 
                  'toolbox.feature.magicType']

@config_register('chart', 'scatter')
class ScatterPropertiesConfig(ChartPropertiesConfig):

    properties = ['title.show', 'title.text', 
                  'grid.left', 'grid.right', 
                  'xAxis.type', 'xAxis.axisLabel.formatter',
                  'yAxis.0.type', 'yAxis.0.axisLabel.formatter',
                  'legend.orient', 'legend.selected', 'legend.max.length',
                  'toolbox.show', 'toolbox.orient', 'toolbox.feature.dataView', 
                  'toolbox.feature.magicType']

@config_register('chart', 'form')
class FormPropertiesConfig(ChartPropertiesConfig):

    properties = ['form.sScrollY', 'form.iDisplayLength']



